/**
 - 通过rollup打包成umd模块，所有export的变量会绑定到window对象的上，没有导出的变量都无法访问
 - violentmonkey 现在已经支持顶级import语句了，需要使用的脚本设置 @top-level-await
 - 需要开启treeshake并显示使用变量，如果关闭treeshake会把模块中所有导出的变量导入。
 */

export {waitFor, range, stringify} from 'global-util.js'; // rollup插件支持全局import，只需配置nodeResolve插件
export {
	addButtonCss, buildToc, collapse, createCollapseButton, highlightCurrentTocHeading, layoutColumns,
	scrollRelativeToViewTop, compileCss, addUnoCss, loadUno,
} from './src/style.js';
export {
	onLocationChange, CompareDom, escapeCss, escapeHtml, parseHTML,
	setReactValue, setVueValue, observe, onDrag, makeMovable, makeResizable,
	onHotkey, triggerHotkey, showToast,
} from './src/dom.js';
export {gmStore, reqGM, GMClient} from './src/gm.js';
export {req, XHRClient} from './src/http.js';
export {highlight, jqExtend, loadFluentUI, loadShoelaceUI, importEsm, importCss} from './src/lib.js';
import {reqGM} from './src/gm.js';
import {req} from './src/http.js';
import {jqExtend} from './src/lib.js';

// 进行扩展功能
jqExtend(window.$); // 扩展jquery的功能，window指向的是GM沙箱环境

// gm_util依赖jquery和lodash，如果不存在，则异步加载jquery和lodash并注册到GM的window上
if (!window.$){
	import('https://esm.run/jquery@3').then(({default:$})=>{
		window.$ = $;
		if (!unsafeWindow.$){
			unsafeWindow.$ = $;
		}
	});
}
if (!window._){
	import('https://esm.run/lodash@4').then(({default:_})=>{
		window._ = _;
		if (!unsafeWindow._){
			unsafeWindow._ = _;
		}
	});
}

// 暴露变量到unsafeWindow
if (!unsafeWindow.$){ // 如果页面没有jQuery，则绑定GM的jQuery
	unsafeWindow.$ = window.$;
}
if (!unsafeWindow._){ // 如果页面没有lodash，则绑定GM的lodash
	unsafeWindow._ = window._;
}
unsafeWindow.req = req; // 暴露封装xhr的req函数
unsafeWindow.reqGM = reqGM; // 暴露封装GM-xhr的reqGM函数
unsafeWindow.gmWin = window; // 暴露当前脚本的全局对象
unsafeWindow.gmutil = window.gmutil; // 暴露gmutil工具库
